/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package configuraciones;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.cip.esymons.general.be.PersonaJuridica;
import org.cip.esymons.general.be.Rubro;
//import org.cip.esymons.general.util.Utiles;


/**
 *
 * @author lizardo
 */
public class GeneralController {
    private SelectItem[] comboEstadoCivil;
    private SelectItem[] comboMeses;
    private SelectItem[] comboTipoPersona;
    private SelectItem[] comboTipoEmpresaTelefono;
    private SelectItem[] comboTipoTelefono;

    private GeneralDelegate delegado;
    private List<PersonaJuridica> listaEmpresas;
    private String totalEmpresas;
    private PersonaJuridica empresa;
    
    private Integer rubCodigo;

    /*********************** Constructor de la clase *************************/
    public GeneralController() {
        inicializar();
    }

    public void inicializar() {
        delegado = new GeneralDelegate();
        empresa = new PersonaJuridica();
        listaEmpresas = new ArrayList<PersonaJuridica>();
        listarEmpresas();
    }

    /******************************** Gettters *******************************/
    /**
     * combo para estado civil de la persona natural
     */
    public List<PersonaJuridica> getListaEmpresas() {
        listarEmpresas();
        return listaEmpresas;
    }

    public void setListaEmpresas(List<PersonaJuridica> listaEmpresas) {
        this.listaEmpresas = listaEmpresas;
    }

    public Integer getRubCodigo() {
        return rubCodigo;
    }

    public void setRubCodigo(Integer rubCodigo) {
        this.rubCodigo = rubCodigo;
    }

    public String getTotalEmpresas() {
        return totalEmpresas;
    }

    public void setTotalEmpresas(String totalEmpresas) {
        this.totalEmpresas = totalEmpresas;
    }

    public PersonaJuridica getEmpresa() {
        return empresa;
    }

    public void setEmpresa(PersonaJuridica empresa) {
        this.empresa = empresa;
    }

    public GeneralDelegate getDelegado() {
        return delegado;
    }

    public void setDelegado(GeneralDelegate delegado) {
        this.delegado = delegado;
    }


    /**************************************************************************/

    public SelectItem[] getComboEstadoCivil() {
        //Combo de Estado civil lista todos los estado civiles de la persona
        comboEstadoCivil = new SelectItem[5];
        comboEstadoCivil[0] = new SelectItem(new Integer(0),"No Definido");
        comboEstadoCivil[1] = new SelectItem(new Integer(1),"Soltero");
        comboEstadoCivil[2] = new SelectItem(new Integer(2),"Casado");
        comboEstadoCivil[3] = new SelectItem(new Integer(3),"Divorciado");
        comboEstadoCivil[4] = new SelectItem(new Integer(4),"Viudo");
        return comboEstadoCivil;
    }

    /**
     * combo para los meses del año
     */
    public SelectItem[] getComboMeses() {
        //Combo de Meses lista todos los meses del año
        comboMeses = new SelectItem[12];
        comboMeses[0] = new SelectItem(new Integer(0),"Enero");
        comboMeses[1] = new SelectItem(new Integer(1),"Febrero");
        comboMeses[2] = new SelectItem(new Integer(2),"Marzo");
        comboMeses[3] = new SelectItem(new Integer(3),"Abril");
        comboMeses[4] = new SelectItem(new Integer(4),"Mayo");
        comboMeses[5] = new SelectItem(new Integer(5),"Junio");
        comboMeses[6] = new SelectItem(new Integer(6),"Julio");
        comboMeses[7] = new SelectItem(new Integer(7),"Agosto");
        comboMeses[8] = new SelectItem(new Integer(8),"Setiembre");
        comboMeses[9] = new SelectItem(new Integer(9),"Octubre");
        comboMeses[10]= new SelectItem(new Integer(10),"Noviembre");
        comboMeses[11]= new SelectItem(new Integer(11),"Diciembre");
        return comboMeses;
    }
    
    /**
     * combo para los Tipos de persona natural
     */
    public SelectItem[] getComboTipoPersona() {
        //Combo de Tipo persona lista todos los tipos de las persona
        comboTipoPersona = new SelectItem[4];
        comboTipoPersona[0] = new SelectItem(new Integer(0),"NO COLEGIADO");
        comboTipoPersona[1] = new SelectItem(new Integer(1),"COLEGIADO");
        comboTipoPersona[2] = new SelectItem(new Integer(2),"PRE INSCRITOS");
        comboTipoPersona[3] = new SelectItem(new Integer(3),"NUEVO");
        return comboTipoPersona;
    }

    /**
     * combo para los Tipos de persona natural
     */
    public SelectItem[] getComboTipoEmpresaTelefono() {
        //Combo de Tipo persona lista todos los tipos de las persona
        comboTipoEmpresaTelefono = new SelectItem[5];
        comboTipoEmpresaTelefono[0] = new SelectItem("MOVISTAR","MOVISTAR");
        comboTipoEmpresaTelefono[1] = new SelectItem("CLARO","CLARO");
        comboTipoEmpresaTelefono[2] = new SelectItem("NEXTEL","NEXTEL");
        comboTipoEmpresaTelefono[3] = new SelectItem("TELMEX","TELMEX");
        comboTipoEmpresaTelefono[4] = new SelectItem("TELEFÓNICA","TELEFÓNICA");
        return comboTipoEmpresaTelefono;
    }

    public SelectItem[] getComboTipoTelefono() {
        //Combo de Tipo persona lista todos los tipos de las persona
        comboTipoTelefono = new SelectItem[5];
        comboTipoTelefono[0] = new SelectItem("FIJO","FIJO");
        comboTipoTelefono[1] = new SelectItem("CELULAR","CELULAR");
        comboTipoTelefono[2] = new SelectItem("RPM","RPM");
        comboTipoTelefono[3] = new SelectItem("RPC","RPC");
        comboTipoTelefono[4] = new SelectItem("NEXTEL","NEXTEL");
        return comboTipoTelefono;
    }

    /***************Actualizacion de datos para las empresas *****************/

    public SelectItem[] getComboRubro() {
        try {
            int cont;
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            //GeneralDelegate delegado = new GeneralDelegate();
            List<Rubro> listaRubro = delegado.findAll();
            selects = new SelectItem[listaRubro.size()];
            cont = 0;
            for (Rubro r : listaRubro) {
                SelectItem item = new SelectItem(r.getRubCodigo(), r.getRubDescripcion());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen rubros");
            selects[0] = item;
            return selects;
        }
    }

    public String listarEmpresas() {
        try {
            //PersonaJuridicaDelegate delegadoEmpresa = new PersonaJuridicaDelegate();
            //listaEmpresas = delegadoEmpresa.listarEmpresas();
            listaEmpresas = delegado.listarEmpresas();
//            totalEmpresas = Utiles.totalRegistro(listaEmpresas, "empresas registradas.");
            //delegadoEmpresa = null;
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Al listar las empresas...", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    public String agregarEmpresa() {
        try {
            PersonaJuridicaDelegate delegadoEmpresa = new PersonaJuridicaDelegate();
            Rubro rubro = new Rubro();
            rubCodigo = (rubCodigo != null) ? rubCodigo : 0;
            rubro = delegado.find(rubCodigo);
            empresa.setRubCodigo(rubro);
            delegadoEmpresa.registrar(empresa);
            rubCodigo = 0;
            empresa = new PersonaJuridica();
            rubro = null;
            delegadoEmpresa = null;
            mostrarMensaje("INFO: ", "Se registro con éxito la persona jurídica...", FacesMessage.SEVERITY_INFO);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Al registrar la empresa...", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return listarEmpresas();
    }

    public String eliminarEmpresa() {
        try {
            PersonaJuridicaDelegate delegadoEmpresa = new PersonaJuridicaDelegate();
            delegadoEmpresa.eliminar(empresa);
            delegadoEmpresa = null;
        } catch (Exception ex) {
            mostrarMensaje("Error: ", "No se puede eliminar esta empresa!", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return listarEmpresas();
    }

    public String actualizarEmpresas() {
        try {
            PersonaJuridicaDelegate delegadoEmpresa = new PersonaJuridicaDelegate();
            for (PersonaJuridica pj : listaEmpresas) {
                delegadoEmpresa.actualizar(pj);
            }
            delegadoEmpresa = null;
            mostrarMensaje("INFO: ", "Se actualizo datos de las empresas...", FacesMessage.SEVERITY_INFO);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Al actualizar las empresas...", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }


}
